/******************************************************************************
 * Copyright (C) 2017 Chengdu Dlhd information industry co. LTD.
 * All Rights Reserved.
 * 本软件为成都顶联互动信息产业有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package net.dgg.dggcloud.service.jrcrm.service.cms;

import net.dgg.dggcloud.core.constants.Constants;
import net.dgg.dggcloud.core.idwork.KeyWorker;
import net.dgg.dggcloud.core.json.JsonUtil;
import net.dgg.dggcloud.core.mqmessage.EnterpriseEntity;
import net.dgg.dggcloud.core.util.StringUtils;
import net.dgg.dggcloud.service.common.base.service.BaseService;
import net.dgg.dggcloud.service.common.util.HttpUtility;
import net.dgg.dggcloud.service.entity.user.User;
import net.dgg.dggcloud.service.jrcrm.common.webscoket.MsgPublisher;
import net.dgg.dggcloud.service.jrcrm.dao.cms.MessageDao;
import net.dgg.dggcloud.service.jrcrm.dao.cms.MessageTemplateDao;
import net.dgg.dggcloud.service.jrcrm.dao.cms.UserSettingDao;
import net.dgg.dggcloud.service.jrcrm.entity.cms.Message;
import net.dgg.dggcloud.service.jrcrm.entity.cms.MessageTemplate;
import net.dgg.dggcloud.service.service.organization.OrganizationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @ClassName 〈MessageService>
 * @Description 消息发送
 * @Author 罗金
 * @Date 2017/11/17 11:14
 */
@Service
public class MqmessageService extends BaseService{
//    private Logger logger= LoggerFactory.getLogger(this.getClass());
//    @Resource
//    private KeyWorker keyWorker;
//    @Resource
//    private SmsRecordService smsRecordService;
//    @Resource
//    private MessageDao messageDao;
//    @Resource
//    private MessageTemplateDao messageTemplateDao;
//    @Resource
//    private MessageTemplateService messageTemplateService;
//    @Resource
//    private OrganizationService organizationService;
//    @Resource
//    private MessageManager wxMessageManager;
//    @Resource
//    private UserSettingDao userSettingDao;
//
//    @Value("${qywx.queueName}")
//    private String qywxQueueName="";
//
//    @Value("${xdy.send_message_url}")
//    private String xdySendMessageUrl="";
//    /**
//     * 通过消息模版发送消息(及时)
//     *
//     * @param receiverUser        接收人
//     * @param sendUser            发送人
//     * @param vals                模版：【{0}】的商机【{1}】因为【{2}】在【{3}】已掉库
//     *                            参数：
//     *                            String[] vals = {"张三", "SJ201711184555", "超期跟进", "2017-11-12 15:55"};
//     *                            或： String[] vals = new String[3];
//     *                            vals[0]="张三";
//     *                            vals[1]="SJ201711184555";
//     *                            vals[2]="超期跟进";
//     *                            vals[3]="2017-11-12 15:55";
//     *                            效果：【张三】的商机【SJ201711184555】因为【超期跟进】在【17-11-16 下午7:32】已掉库
//     * @param messageTemplateCode 消息模版code
//     */
//    public Map<String,Object> sendMessage(User receiverUser, User sendUser, String[] vals, String messageTemplateCode) {
//        Map<String,Object> retMap = new HashMap<>();
//        int optStatus = 1;//1操作成功，0失败
//        String optMsg = "操作成功";
//        try {
//            if (null != receiverUser && StringUtils.isNotEmpty(messageTemplateCode) && null != vals) {
//                MessageTemplate messageTemplate = messageTemplateService.getMessageTemplateByCode(messageTemplateCode);
//                if (null != messageTemplate && 1 == messageTemplate.getStatus()) {
//                    //模版内容
//                    String tempContent = messageTemplate.getContent();
//
//                    //获取模版参数个数
//                    MessageFormat messageFormat = new MessageFormat(tempContent);
//                    int messageTempLength = messageFormat.getFormatsByArgumentIndex().length;
//
//                    //获取入参个数
//                    int valsLength = vals.length;
//                    //判断入参个数与模版参数个数是否一样
//                    if (messageTempLength == valsLength) {
//                        //推送方式
//                        String pushType = messageTemplate.getPushType();
//                        String audioType = messageTemplate.getAudioType();
//                        boolean pushTypeSms = false,//是否发送短信
//                                pushTypeGeneral = false,//是否发送重点消息
//                                pushTypeImportant = false,//是否发送普通消息
//                                pushTypeXdy= false,//是否发送小顶云
//                                pushTypeQywx= false;//是否发送企业微信
//                        if (StringUtils.isNotEmpty(pushType)) {
//                            pushTypeSms = pushType.contains("PUSH_TYPE_1");//获取推送方式中有无发送短信
//                            pushTypeGeneral = pushType.contains("PUSH_TYPE_2");//获取推送方式中有无发送重点消息
//                            pushTypeImportant = pushType.contains("PUSH_TYPE_3");//获取推送方式中有无发送普通消息
//                            pushTypeXdy = pushType.contains("PUSH_TYPE_4");//获取推送方式中有无发送小顶云
//                            pushTypeQywx = pushType.contains("PUSH_TYPE_5");//获取推送方式中有无发送企业微信
//                        }
//
//                        //推送对象
//                        String pushObject = messageTemplate.getPushObject();
//                        boolean pushObjectSelf = false,//是否推送给当事人
//                                pushObjectLeader = false,//是否推送给直管领导
//                                pushObjectTopLeader = false,//是否推送给上上级领导
//                                pushObjectBugOrgLeader = false;//是否推送给事业部总经理
//                        if (StringUtils.isNotEmpty(pushObject)) {
//                            pushObjectSelf = pushObject.contains("PUSH_OBJECT_1");//获取推送对象中有无当事人
//                            pushObjectLeader = pushObject.contains("PUSH_OBJECT_2");//获取推送对象中有无直管领导
//                            pushObjectTopLeader = pushObject.contains("PUSH_OBJECT_3");//获取推送对象中有无上上级领导
//                            pushObjectBugOrgLeader = pushObject.contains("PUSH_OBJECT_4");//获取推送对象中有无事业部总经理
//                        }
//                        //判断有无可推送方式和可推送对象
//                        if ((pushTypeSms || pushTypeGeneral || pushTypeImportant || pushTypeXdy||pushTypeQywx) && (pushObjectSelf || pushObjectLeader || pushObjectTopLeader || pushObjectBugOrgLeader)) {
//                            String msgContent = messageFormat.format(vals);
//                            //去掉占位符
//                            msgContent = msgContent.replaceAll(Constants.MESSAGE_READY_EMPTY_TAG,"-");
//
//                            //发送给当事人
//                            if (pushObjectSelf) {
//                                this.sendMessageByPushType(receiverUser, sendUser, msgContent, pushTypeSms, pushTypeGeneral, pushTypeImportant,pushTypeXdy,audioType,pushTypeQywx);
//                            }
//                            Map org = new HashMap();
//                            Map userMap = new HashMap();
//                            //判断部门是否为空
//                            if (null != receiverUser.getOrgId()) {
//                                org.put("organizationId",receiverUser.getOrgId());
//                                List<Map> map = organizationService.getAncestors(org);
//                                //发送给上级领导
//                                if (pushObjectLeader) {
//                                    receiverUser = null;
//                                    Map mapOrg = map.get(0);
//                                    Long leaderId=null!=mapOrg.get("leaderId")?Long.parseLong(mapOrg.get("leaderId").toString()):null;
//                                    if(null!=leaderId){
//                                        userMap.put("id",leaderId);
//                                        receiverUser =(User) userSettingDao.findUserBySeatNumber(userMap);
//                                        this.sendMessageByPushType(receiverUser, sendUser, msgContent, pushTypeSms, pushTypeGeneral, pushTypeImportant,pushTypeXdy,audioType,pushTypeQywx);
//                                    }
//                                }
//                                //发送给上上级领导
//                                if (pushObjectTopLeader) {
//                                    receiverUser = null;
//                                    Map mapOrg = map.get(1);
//                                    Long leaderId=null!=mapOrg.get("leaderId")?Long.parseLong(mapOrg.get("leaderId").toString()):null;
//                                    if(null!=leaderId){
//                                        userMap.put("id",leaderId);
//                                        receiverUser =(User) userSettingDao.findUserBySeatNumber(userMap);
//                                        this.sendMessageByPushType(receiverUser, sendUser, msgContent, pushTypeSms, pushTypeGeneral, pushTypeImportant,pushTypeXdy,audioType,pushTypeQywx);
//                                    }
//                                }
//                                //发送给事业部总经理
//                                if (pushObjectBugOrgLeader) {
//                                    receiverUser = null;
//                                    Map mapOrg = map.get(2);
//                                    Long leaderId=null!=mapOrg.get("leaderId")?Long.parseLong(mapOrg.get("leaderId").toString()):null;
//                                    if(null!=leaderId){
//                                        userMap.put("id",leaderId);
//                                        receiverUser =(User) userSettingDao.findUserBySeatNumber(userMap);
//                                        this.sendMessageByPushType(receiverUser, sendUser, msgContent, pushTypeSms, pushTypeGeneral, pushTypeImportant,pushTypeXdy,audioType,pushTypeQywx);
//                                    }
//                                }
//                            }
//                        } else {
//                            logger.error("操作失败:未找到可推送方式或推送对象，检查是否设置了短信模版相关内容");
//                            optStatus=0;
//                            optMsg = "操作失败:未找到可推送方式或推送对象，检查是否设置了短信模版相关内容";
//                        }
//                    } else {
//                        logger.error("操作失败:vals参数不匹配，检查入参个数与模版参数个数是否一样");
//                        optStatus=0;
//                        optMsg = "操作失败:vals参数不匹配，检查入参个数与模版参数个数是否一样";
//                    }
//                } else {
//                    logger.error("操作失败:根据CODE未找到可用消息模版，或消息模版禁用");
//                    optStatus=0;
//                    optMsg = "操作失败:根据CODE未找到可用消息模版，或消息模版禁用";
//                }
//            } else {
//                logger.error("操作失败:接收人、消息模版或模版参数为空");
//                optStatus=0;
//                optMsg = "操作失败:接收人、消息模版或模版参数为空";
//            }
//        } catch (Exception e) {
//            optStatus=0;
//            optMsg = "操作失败:"+e.getMessage();
//            logger.error("操作失败:"+e.getMessage());
//        }
//        retMap.put("optStatus",optStatus);
//        retMap.put("optMsg",optMsg);
//        return  retMap;
//    }
//    /**
//     * 发送不同推送类型的消息
//     *
//     * @param receiverUser      接收人
//     * @param sendUser          发送人
//     * @param content           内容
//     * @param pushTypeSms       发送短信
//     * @param pushTypeGeneral   发送普通消息
//     * @param pushTypeImportant 发送重要消息
//     */
//    public void sendMessageByPushType(User receiverUser, User sendUser, String content, boolean pushTypeSms, boolean pushTypeGeneral, boolean pushTypeImportant, boolean pushTypeXdy,String audioType,boolean qywx) {
//        if (null != receiverUser && StringUtils.isNotEmpty(content)) {
//            //发送短信
//            if (pushTypeSms) {
//                //发送短信需处理掉html标签
//                smsRecordService.sendMsg(receiverUser.getPhone(), StringUtils.delHtmlTag(content), receiverUser.getName(), sendUser);
//            }
//            //发送普通消息
//            if (pushTypeGeneral) {
//                this.saveMessage(receiverUser, sendUser, content, 1,audioType);
//            }
//            //发送重要消息
//            if (pushTypeImportant) {
//                this.saveMessage(receiverUser, sendUser, content, 2,audioType);
//            }
//            //发送小顶云
//            if (pushTypeXdy) {
//                this.sendXdyMessage(receiverUser.getLoginName(),content);
//            }
//            //发送企业微信
//            if (qywx) {
//                this.sendQywxMessage(receiverUser,sendUser,content);
//            }
//        }
//    }
//    /**
//     * 发送消息
//     *
//     * @param receiverUser 接收人
//     * @param sendUser     发送人
//     * @param content      内容
//     * @param msgType      类型 1普通消息，2重要消息
//     */
//    public void saveMessage(User receiverUser, User sendUser, String content, Integer msgType,String audioType) {
//        if (null != receiverUser && StringUtils.isNotEmpty(content)) {
//            Message message = new Message();
//            message.setId(keyWorker.nextId());
//            message.setReceiverId(receiverUser.getId());
//            message.setMesType(null == msgType ? 1 : msgType);
//            message.setContent(content);
//            message.setReadFlag(0);
//            message.setSendStatus(0);
//            message.setCreateUser(sendUser);
//            message.setAudioType(audioType);
//            messageDao.saveByHiber(message);
//            MsgPublisher.getInstance().publish(receiverUser.getId(), content, message);
//        }
//    }
//    /**
//     * 发送消息
//     *
//     * @param employeeNo 接收人工号
//     * @param content      消息内容
//     */
//    public void sendXdyMessage(String employeeNo, String content) {
//        if (StringUtils.isNotEmpty(employeeNo) && StringUtils.isNotEmpty(content) && StringUtils.isNotEmpty(xdySendMessageUrl)) {
//            try{
//                Map msgParams = new HashMap();
//                msgParams.put("employeeNo", employeeNo);
//                msgParams.put("title",  "IBOSS提醒");
//                msgParams.put("model", "IBOSS");
//                msgParams.put("content",  StringUtils.delHtmlTag(content));
//                msgParams.put("pkId", "IBOSS");
//                msgParams.put("messageType", 5);
//                msgParams.put("type", 6);
//                Map params = new HashMap();
//                params.put("params", JsonUtil.obj2Json(msgParams));
//                String result=  HttpUtility.postRest(xdySendMessageUrl,params);
//                logger.info(result);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    /**
//     * 发送消息 企业微信
//     *
//     * @param
//     * @param content      消息内容
//     */
//    public void sendQywxMessage(User reUser,User sendUser, String content) {
//        if (StringUtils.isNotEmpty(sendUser.getLoginName()) && StringUtils.isNotEmpty(content)) try {
//            EnterpriseEntity enterpriseEntity = new EnterpriseEntity();
//            enterpriseEntity.setContent(StringUtils.delHtmlTag(content));
//            enterpriseEntity.setTotag("");
//            enterpriseEntity.setMsgId(keyWorker.nextId());
//            enterpriseEntity.setToparty("");
//            enterpriseEntity.setAppKey("IBOSS");
//            enterpriseEntity.setSender(sendUser.getLoginName());
//            enterpriseEntity.setTouser(reUser.getLoginName());
//            wxMessageManager.putMessage(qywxQueueName, enterpriseEntity);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }



}
